package main

import (
	"flag"
	"os"

	"openSesame/internal/auth"
	"openSesame/internal/proxy"
	"openSesame/internal/whitelist"
	"openSesame/pkg/config"
	"openSesame/pkg/logger"
)

func main() {
	// 解析命令行参数
	configPath := flag.String("config", "config.yaml", "配置文件路径")
	flag.Parse()

	// 初始化日志模块
	logger.InitLogger()
	logger.Info("Starting OpenSesame proxy server...")

	// 加载配置
	var cfg *config.Config
	if _, err := os.Stat(*configPath); os.IsNotExist(err) {
		// 如果配置文件不存在，创建默认配置
		cfg = config.NewDefaultConfig()
		if err := cfg.SaveToFile(*configPath); err != nil {
			logger.Fatalf("Failed to save default config: %v", err)
		}
		logger.Infof("Created default config file at %s", *configPath)
	} else {
		// 从文件加载配置
		cfg, err = config.LoadFromFile(*configPath)
		if err != nil {
			logger.Fatalf("Failed to load config: %v", err)
		}
	}

	// 创建白名单
	wl := whitelist.New(cfg.Whitelist.Expiration)
	defer wl.Stop()

	// 启动认证服务器
	authServer := auth.NewServer(wl, &cfg.Auth)
	go func() {
		if err := authServer.Start(); err != nil {
			logger.Fatalf("Auth server error: %v", err)
		}
	}()

	// 创建并启动代理服务
	proxyManager := proxy.NewManager()
	for _, proxyConfig := range cfg.Proxies {
		proxyManager.AddServer(wl, &proxyConfig)
	}
	proxyManager.StartAll()

	// 等待信号
	select {}
}
